

/**
 * Copyright 2009 cestum.org
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
package org.waveprotocol.wave.model.operation {
import org.waveprotocol.wave.model.document.operation.DocInitialization;
import org.waveprotocol.wave.model.document.operation.impl.DocumentOperationUtil;

/**
 * Utilities for comparing operations.
 */
public class OpComparators {
  function OpComparators() {}

  // Proper equators would also provide hash codes.

//  public interface OpEquator {
//    function equalNullable(a:DocOp, b:DocOp):Boolean ;
//    function equal(a:DocOp, b:DocOp):Boolean ;
//
//    function equalNullable(a:WaveletOperation, b:WaveletOperation):Boolean ;
//    function equal(a:WaveletOperation, b:WaveletOperation):Boolean ;
//  }
//
//  public abstract static class AbstractOpEquator implements OpEquator {
//    
//  
//  }

  public static var SYNTACTIC_IDENTITY:OpEquator= new SyntaticIdentity();
  
  public static function equalDocuments(a:DocInitialization, b:DocInitialization):Boolean {
    return DocumentOperationUtil.toXmlString(a) == (DocumentOperationUtil.toXmlString(b));
  }
}
}